class Solution:
    def splitArray(self, nums: List[int], m: int) -> int:
        left = max(nums)  # 初始左边界为数组中的最大值
        right = sum(nums)  # 初始右边界为数组所有元素之和

        while left < right:
            mid = (left + right) // 2  # 防止整数溢出，使用整数除法
            if self.can_split(nums, m, mid):
                right = mid  # 如果可以分割，尝试更小的分割和
            else:
                left = mid + 1  # 如果不能分割，尝试更大的分割和

        return right

    def can_split(self, nums: List[int], m: int, sum_limit: int) -> bool:
        count = 1  # 初始分割数量为1
        cur_sum = 0  # 当前分割和

        for num in nums:
            cur_sum += num
            if cur_sum > sum_limit:  # 如果当前分割和超过了限制
                cur_sum = num  # 重置当前分割和
                count += 1  # 分割数量加1

        return count <= m  # 如果分割数量不超过m，则返回True

